﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using Project.Models.Entity_Propiedades;

namespace Project.Models
{
    public class Conexion
    {
        string stringcontion = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
         
        SqlConnection con;
        SqlCommand comando;
        SqlDataReader leer;
        public void conectar() { }



       
        #region "Datos en GENERALES"
        public SqlDataReader getSqlDataReader(string query)
        {
            try
            {
                con = new SqlConnection(stringcontion);
                SqlCommand comando = new SqlCommand(query, con);
                con.Open();
                SqlDataReader leer = comando.ExecuteReader();



                return leer;


            }
            catch (SqlException e)
            {

                return null;
            }

        }

       
        public string Guardar(string query)
        {
            try
            {
                SqlConnection con = new SqlConnection(stringcontion);
                SqlCommand comando = new SqlCommand(query, con);
                con.Open();

                if (comando.ExecuteNonQuery() > 0)
                {
                    return "Registro Guardado Satisfactoriamente";
                }
                else
                {

                    return "Error!! Su Accion no pudo ser realizada";
                }
            }
            catch (SqlException e)
            {

                return "Se produjo un Error de Servidor!! Por Favor Trate mas tarde..";

                //return e.Message;   Si desea ver el error sqlServer
            }

        }
        public SqlDataReader GetArrendedorById(int id)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcGetArrendedorById";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ArrendedorID", id));
                con.Open();
                SqlDataReader leer = comando.ExecuteReader();


                return leer;
            }
            catch (SqlException sqlE)
            {
                return null;
            }
            catch (Exception e)
            {
                return null;
            }



        }
        public int DBCambiarMisDatos(Registrar reg, int id)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcCambiarMisDatos";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ArrendedorId", id));
                comando.Parameters.Add(new SqlParameter("@Nombre", reg.nombre));
                comando.Parameters.Add(new SqlParameter("@Telefono", reg.telefono));
                comando.Parameters.Add(new SqlParameter("@Celular", reg.celular));
                comando.Parameters.Add(new SqlParameter("@LogoEmpresa", reg.LogoEmpresa));
                comando.Parameters.Add(new SqlParameter("@Empresa", reg.NombreEmpresa));
                con.Open();
                return int.Parse(comando.ExecuteScalar().ToString());
            }
            catch (SqlException e)
            {
                return -55;
            }
            catch (Exception ee)
            {
                return -44;
            }
        }


        public int DBCambiarPassword(cambiarPassword reg, int id)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcCambiarPassword";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ArrendedorId", id));
                comando.Parameters.Add(new SqlParameter("@OldPassword", reg.OldPassword));
                comando.Parameters.Add(new SqlParameter("@NewPassword", reg.NewPassword));
               
                con.Open();
                return int.Parse(comando.ExecuteScalar().ToString());
            }
            catch (SqlException e)
            {
                return -55;
            }
            catch (Exception ee)
            {
                return -44;
            }
        }
        #endregion

        #region  "Todo lo Relacionado con las PROPIEDADES"

        public SqlDataReader GetContatoByArrendedorId(int id)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcgGetContatoByIdArrendedor";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ArrendedorId", id));
                con.Open();
                SqlDataReader leer = comando.ExecuteReader();


                return leer;
            }
            catch (SqlException sqlE)
            {
                return null;
            }
            catch (Exception e)
            {
                return null;
            }



        }

        //Guardar ficha de contatos
        public string DBGuardarContato(contacto conta, int idArrendedor)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcGuardarContatos";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@nombre", conta.nombre));
                comando.Parameters.Add(new SqlParameter("@direccion", conta.direccion));
                comando.Parameters.Add(new SqlParameter("@telefono", conta.telefono));
                comando.Parameters.Add(new SqlParameter("@celular", conta.celular));
                comando.Parameters.Add(new SqlParameter("@fax", conta.fax));
                comando.Parameters.Add(new SqlParameter("@email", conta.email));
                comando.Parameters.Add(new SqlParameter("@company", conta.company));
                comando.Parameters.Add(new SqlParameter("@Id_Arrendedor", idArrendedor));
                con.Open();
              
                
                if (comando.ExecuteNonQuery() > 0)
                {
                    con.Close();
                    return "Registro Guardado Satisfactoriamente";
                }
                else
                {
                    con.Close();

                    return "Error!! Su Accion no pudo ser realizada";
                }
                
            }
            catch (SqlException sqlE)
            {
                return "Error: SQL";
            }
            catch (Exception e)
            {
                return "Error: general";
            }
        }


        public int NuevaPropiedad(Propiedades prop)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcGuardarNuevaPropiedad";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Categoria", prop.Categoria));
            comando.Parameters.Add(new SqlParameter("@ContactoVenta", prop.ContactoVenta));
            comando.Parameters.Add(new SqlParameter("@ContactoAlquiler", prop.ContactoAlquiler));
            comando.Parameters.Add(new SqlParameter("@descripcion", prop.descripcion));
            comando.Parameters.Add(new SqlParameter("@arrendador", prop.arrendador));
            con.Open();
            return Convert.ToInt32(comando.ExecuteScalar());

        }
        public void NuevoApartamento(Apartamentos apar)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcGuardarNuevoApartamento";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", apar.propiedades.Id_Propiedad));
            comando.Parameters.Add(new SqlParameter("@Dormitorios", apar.Dormitorios));
            comando.Parameters.Add(new SqlParameter("@CuartoServicio_", apar.CuartoServicio_));
            comando.Parameters.Add(new SqlParameter("@Acensor_", apar.Acensor_));
            comando.Parameters.Add(new SqlParameter("@Parqueos", apar.Parqueos));
            comando.Parameters.Add(new SqlParameter("@MetrosCuadrados", apar.MetrosCuadrados));
            con.Open();
            comando.ExecuteNonQuery();
        }
        public void NuevaCasa(Casas casa)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcGuardarNuevaCasa";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", casa.propiedades.Id_Propiedad));
            comando.Parameters.Add(new SqlParameter("@Dormitorios", casa.Dormitorios));
            comando.Parameters.Add(new SqlParameter("@CuartoServicio_", casa.CuartoServicio_));
            comando.Parameters.Add(new SqlParameter("@MetrosConstruccion", casa.MetrosConstruccion));
            comando.Parameters.Add(new SqlParameter("@Parqueos", casa.Parqueos));
            comando.Parameters.Add(new SqlParameter("@MetrosSolares", casa.MetrosSolares));
            con.Open();
            comando.ExecuteNonQuery();
        }
        public void NuevoSolar(Solares solar)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcGuardarNuevoSolar";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", solar.propiedades.Id_Propiedad));
            comando.Parameters.Add(new SqlParameter("@MetrosCuadrados", solar.MetrosCuadrados));
            comando.Parameters.Add(new SqlParameter("@CostoPorMetroCuadrado", solar.CostoPorMetroCuadrado));
            con.Open();
            comando.ExecuteNonQuery();
        }
        public void DetalleVenta(int idPropiedad, string TipoMoneda, string Valor)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcAgregarDetalleVenta";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", idPropiedad));
            comando.Parameters.Add(new SqlParameter("@TipoMoneda", TipoMoneda));
            comando.Parameters.Add(new SqlParameter("@Valor", Valor));
            con.Open();
            comando.ExecuteNonQuery();
        }
        public void DetalleAlquiler(int idPropiedad, string Tipo_Moneda, string TipoPago, double MontoPagos, int CantidadDepositos)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcAgregarDetalleAlquiler";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", idPropiedad));
            comando.Parameters.Add(new SqlParameter("@Tipo_Moneda", Tipo_Moneda));
            comando.Parameters.Add(new SqlParameter("@TipoPago", TipoPago));
            comando.Parameters.Add(new SqlParameter("@MontoPagareses", MontoPagos));
            comando.Parameters.Add(new SqlParameter("@CantidadDeposito", CantidadDepositos));
            con.Open();
            comando.ExecuteNonQuery();
        }
        public void AgregarDireccion(int idPropiedad, int idSector, double latitud, double longitud, string direccion)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcAgregarDireccion";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", idPropiedad));
            comando.Parameters.Add(new SqlParameter("@Direccion", direccion));
            comando.Parameters.Add(new SqlParameter("@Id_Sector", idSector));
            comando.Parameters.Add(new SqlParameter("@Latitud", latitud));
            comando.Parameters.Add(new SqlParameter("@Longitud", longitud));
            con.Open();
            comando.ExecuteNonQuery();
        }

        public void GuardarImagen(int idPropiedad, string src)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcAgregarImagen";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@Id_Propiedad", idPropiedad));
            comando.Parameters.Add(new SqlParameter("@src", src));
            con.Open();
            comando.ExecuteNonQuery();
        }

#endregion

        #region "VIA EMAIL"

        //Guardar el registro de los usuarios en la base de datos
        public string DBGuardarRegistro(Registrar reg, string TemporalPassword)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcGuardarRegistro";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@nombre", reg.nombre));
                comando.Parameters.Add(new SqlParameter("@email", reg.email));
                comando.Parameters.Add(new SqlParameter("@password", TemporalPassword));

                con.Open();
                string Resultado = comando.ExecuteScalar().ToString();
                con.Close();
                return Resultado;
            }
            catch (SqlException sqlE)
            {
                return "Error: SQL";
            }
            catch (Exception e)
            {
                return "Error: general";
            }
        }

        //Cambiar el cambiar el password de Default a los usuarios
        public int DBCambiarDefaultPass(CambiarDefaultPassword model)
        {

            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcCambiarDefaultPassw";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@email", model.email));
                comando.Parameters.Add(new SqlParameter("@oldPassword", model.defaultPass));
                comando.Parameters.Add(new SqlParameter("@newPassword", model.password));
                con.Open();
                int Resultado = Convert.ToInt32(comando.ExecuteScalar());
                con.Close();
                return Resultado;
            }
            catch (SqlException sqlE)
            {
                return -55;
            }
            catch (Exception e)
            {
                return -44;
            }

        }
        public object DBLogin(LogIng log)
        {
            Registrar arrendedor = null;
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                //para obtener el parametro de la base de datos
                SqlParameter Result = new SqlParameter();
                Result.ParameterName = "@result";
                Result.SqlDbType = SqlDbType.Int;
                Result.Direction = ParameterDirection.Output;
                comando.CommandText = "ProcLogin";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@email", log.email));
                comando.Parameters.Add(new SqlParameter("@Password", log.password));
                comando.Parameters.Add(Result);
                con.Open();
                leer = comando.ExecuteReader();

                if (leer.HasRows)
                {
                    //todo esta Bien le mando el.
                    while (leer.Read())
                    {
                        arrendedor = new Registrar { ArrendadorID = Convert.ToInt32(leer[0]), nombre = Convert.ToString(leer[1]) };
                    }
                    con.Close();
                    return arrendedor;
                }
                else
                {
                    con.Close();
                    string ResultFromDataBase = comando.Parameters["@result"].Value.ToString();

                    return ResultFromDataBase;
                }


            }
            catch (SqlException sqlE)
            {
                return null;
            }
            catch (Exception e)
            {
                return null;
            }

        }


        #endregion

        #region "VIA Twitter SQL"
        public int RegistrarViaTwitter(string screen_name, string Name, string Token, string Token_Secret, string UserID) 
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = "ProcRegistrarViaTwitter";
            comando.Connection = con;
            comando.Parameters.Add(new SqlParameter("@ScreenName", screen_name));
            comando.Parameters.Add(new SqlParameter("@Name", Name));
            comando.Parameters.Add(new SqlParameter("@Token", Token));
            comando.Parameters.Add(new SqlParameter("@Token_Secret", Token_Secret));
            comando.Parameters.Add(new SqlParameter("@UserID", UserID));
            con.Open();
            return int.Parse(comando.ExecuteScalar().ToString());
            
        }
        public int AsociarTwitter(string screen_name, string Name, string Token, string Token_Secret, string UserID, int arrendadorid)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcAsociarTwitter";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ScreenName", screen_name));
                comando.Parameters.Add(new SqlParameter("@Name", Name));
                comando.Parameters.Add(new SqlParameter("@Token", Token));
                comando.Parameters.Add(new SqlParameter("@Token_Secret", Token_Secret));
                comando.Parameters.Add(new SqlParameter("@UserID", UserID));
                comando.Parameters.Add(new SqlParameter("@arrendadorid", arrendadorid));
                con.Open();
                return Convert.ToInt32(comando.ExecuteScalar());
         
            
            }
            catch (SqlException e)
            {
                return -55;
            }
            catch (Exception ee)
            {

                return -44;
            }
                      
        }

        public string GetTwitterUsername(int Id_Usuario)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.Connection = con;
            comando.CommandText = String.Format("select screen_name from ViaTwitter where Id_Usuario = (select UsuarioId from Usuarios where ArrendedorId = {0})", Convert.ToString(Id_Usuario));
            con.Open();
            string valor = "";
            if (comando.ExecuteScalar() != null)
            {
                valor = comando.ExecuteScalar().ToString();
            }
            return valor;
        }
        #endregion

        #region "VIA Facebook SQL"
        public int RegistrarViaFacebook(string screen_name, string Name, string Token, string UserID)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcRegistrarFacebook";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ScreenName", screen_name));
                comando.Parameters.Add(new SqlParameter("@Name", Name));
                comando.Parameters.Add(new SqlParameter("@Token", Token));
                comando.Parameters.Add(new SqlParameter("@UserID", UserID));
                con.Open();
                return int.Parse(comando.ExecuteScalar().ToString());
            }catch(Exception e){
                return -88;
            
            }

        }
        public int AsociarFacebook(string screen_name, string Name, string Token, string UserID, int arrendadorid)
        {
            try
            {
                comando = new SqlCommand();
                con = new SqlConnection(stringcontion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ProcAsociarFacebook";
                comando.Connection = con;
                comando.Parameters.Add(new SqlParameter("@ScreenName", screen_name));
                comando.Parameters.Add(new SqlParameter("@Name", Name));
                comando.Parameters.Add(new SqlParameter("@Token", Token));
                comando.Parameters.Add(new SqlParameter("@UserID", UserID));
                comando.Parameters.Add(new SqlParameter("@arrendadorid", arrendadorid));
                con.Open();
                return Convert.ToInt32(comando.ExecuteScalar());


            }
            catch (SqlException e)
            {
                return -55;
            }
            catch (Exception ee)
            {

                return -44;
            }

     
        }
        public string GetFacebookUsername(int Id_Usuario)
        {
            comando = new SqlCommand();
            con = new SqlConnection(stringcontion);
            comando.Connection = con;
            comando.CommandText = String.Format("select screen_name from ViaFacebook where Id_Usuario = (select UsuarioId from Usuarios where ArrendedorId = {0})", Convert.ToString(Id_Usuario));
            con.Open();
            string valor = "";
            if (comando.ExecuteScalar() != null)
            {
                valor = comando.ExecuteScalar().ToString();
            }
            return valor;
        }
        #endregion

 

        
    }

    
    
    }
